package it.bela.pgcdc.domain;

import it.bela.pgcdc.common.bean.BaseBean;

import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;

import java.io.Serializable;
import java.util.Date;
import javax.validation.constraints.Past;
import javax.persistence.Entity;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.persistence.Transient;

import org.hibernate.validator.constraints.Email;
import org.hibernate.validator.constraints.NotBlank;
import javax.persistence.ManyToOne;
import javax.persistence.Enumerated;
import java.util.Set;
import java.util.HashSet;
import javax.persistence.ManyToMany;
import javax.persistence.CascadeType;

@Entity
@Table
public class Contatto extends BaseBean implements Serializable {

	@Transient
	private static final long serialVersionUID = 1L;
	
	@Transient
	private boolean sendTo;
	
	@Transient
	private String altraParrocchia;
	
	@Transient
	private String altroLavoro;
	
	@Transient
	private String altraPreferenza;
	
	@Transient
	private String altraAttivita;
	
	@Transient
	private String altroHobby;

    @NotNull
    @NotBlank
    @Size(max = 30)
    private String nome;

    @NotNull
    @NotBlank
    @Size(max = 30)
    private String cognome;

    @Past
    @Temporal(TemporalType.TIMESTAMP)
//    @DateTimeFormat(style = "M-")
    private Date dataNascita;

    @NotNull
    @NotBlank
    @Size(max = 30)
    @Email
    private String email;

    @Size(max = 30)
    private String telefono;

    private String indirizzo;

    @ManyToOne
    private Lavoro lavoro;

    @ManyToOne
    private Parrocchia parrocchia;

    @Enumerated
    private StatoCivileType statoCivile;

    @ManyToMany(cascade = CascadeType.DETACH)
    private Set<Hobby> hobbies = new HashSet<Hobby>();

    @ManyToMany(cascade = CascadeType.DETACH)
    private Set<Preferenza> preferenze = new HashSet<Preferenza>();

    @ManyToMany(cascade = CascadeType.DETACH)
    private Set<Attivita> attivita = new HashSet<Attivita>();
    
    @ManyToMany(cascade = CascadeType.DETACH)
    private Set<MailingList> mailingList = new HashSet<MailingList>();

	public String getNome() {
		return nome;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}

	public String getCognome() {
		return cognome;
	}

	public void setCognome(String cognome) {
		this.cognome = cognome;
	}

	public Date getDataNascita() {
		return dataNascita;
	}

	public void setDataNascita(Date dataNascita) {
		this.dataNascita = dataNascita;
	}

	public String getEmail() {
		return email;
	}

	public void setEmail(String email) {
		this.email = email;
	}

	public String getTelefono() {
		return telefono;
	}

	public void setTelefono(String telefono) {
		this.telefono = telefono;
	}

	public String getIndirizzo() {
		return indirizzo;
	}

	public void setIndirizzo(String indirizzo) {
		this.indirizzo = indirizzo;
	}

	public Lavoro getLavoro() {
		return lavoro;
	}

	public void setLavoro(Lavoro lavoro) {
		this.lavoro = lavoro;
	}

	public Parrocchia getParrocchia() {
		return parrocchia;
	}

	public void setParrocchia(Parrocchia parrocchia) {
		this.parrocchia = parrocchia;
	}

	public StatoCivileType getStatoCivile() {
		return statoCivile;
	}

	public void setStatoCivile(StatoCivileType statoCivile) {
		this.statoCivile = statoCivile;
	}

	public Set<Hobby> getHobbies() {
		return hobbies;
	}

	public void setHobbies(Set<Hobby> hobbies) {
		this.hobbies = hobbies;
	}

	public Set<Preferenza> getPreferenze() {
		return preferenze;
	}

	public void setPreferenze(Set<Preferenza> preferenze) {
		this.preferenze = preferenze;
	}

	public Set<Attivita> getAttivita() {
		return attivita;
	}

	public void setAttivita(Set<Attivita> attivita) {
		this.attivita = attivita;
	}

	public Set<MailingList> getMailingList() {
		return mailingList;
	}

	public void setMailingList(Set<MailingList> mailingList) {
		this.mailingList = mailingList;
	}

	public void setSendTo(boolean sendTo) {
		this.sendTo = sendTo;
	}

	public boolean isSendTo() {
		return sendTo;
	}

	public void setAltraParrocchia(String altraParrocchia) {
		this.altraParrocchia = altraParrocchia;
	}

	public String getAltraParrocchia() {
		return altraParrocchia;
	}

	public void setAltroLavoro(String altroLavoro) {
		this.altroLavoro = altroLavoro;
	}

	public String getAltroLavoro() {
		return altroLavoro;
	}

	public void setAltraAttivita(String altraAttivita) {
		this.altraAttivita = altraAttivita;
	}

	public String getAltraAttivita() {
		return altraAttivita;
	}

	public void setAltroHobby(String altroHobby) {
		this.altroHobby = altroHobby;
	}

	public String getAltroHobby() {
		return altroHobby;
	}

	public void setAltraPreferenza(String altraPreferenza) {
		this.altraPreferenza = altraPreferenza;
	}

	public String getAltraPreferenza() {
		return altraPreferenza;
	}
}
